﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL;
using DataAccessComponents;
using System.Collections.ObjectModel;

namespace BusinessLogicLayer
{
    public class TerminBL : IBusinessLogicLayer<Termin>
    {
        private DbOperations dal = new DbOperations();

        /// <summary>
        /// Dodaje pozycje do menu termin
        /// </summary>
        /// <param name="objDodaj">Obiekt termin</param>
        /// <returns>Indeks ostatnio wstawionego wiersz</returns>
        public int dodaj(Termin objDodaj)
        {
            return dal.dodajTermin(objDodaj);

        }

        /// <summary>
        /// Usun obiekt
        /// </summary>
        /// <param name="idusun">Id obiektu do usuniecia</param>
        public void usun(int idusun)
        {
            dal.usunTermin(idusun);
        }

        /// <summary>
        /// Funkcja aktualizuje Termin
        /// </summary>
        /// <param name="objAktualizuj">Zakutalizowany obiekt</param>
        public void aktualizuj(Termin objAktualizuj)
        {
            OfertaBL ofertaBL = new OfertaBL();
            ofertaBL.aktualizuj(objAktualizuj.Oferta);
            dal.aktualizujTermin(objAktualizuj);
        }

        /// <summary>
        /// Funkcja zwraca obiekt termin na postawie id
        /// </summary>
        /// <param name="idpobierz">Id obiektu do pobrania</param>
        /// <returns>Obiekt Termin</returns>
        public Termin pobierz(int idpobierz)
        {
            Termin tmp = dal.pobierzTermin(idpobierz);
            OfertaBL ofertaBL = new OfertaBL();
            tmp.Oferta = ofertaBL.pobierz(tmp.Id_oferta);
            return tmp;
        }

        /// <summary>
        /// Zwraca liste wszystkich terminów
        /// </summary>
        /// <returns></returns>
        public ObservableCollection<Termin> pobierzListe()
        {
            ObservableCollection<Termin> lista = dal.pobierzListeTermin();
            OfertaBL ofertaBL = new OfertaBL();
            foreach(Termin termin in lista){
                termin.Oferta = ofertaBL.pobierz(termin.Id_oferta);
            }
            return lista;
        }

        /// <summary>
        /// Zwraca liste terminów oferty o podanym id_oferta
        /// </summary>
        /// <returns></returns>
        public ObservableCollection<Termin> pobierzListe(int idoferta)
        {
            ObservableCollection<Termin> lista = dal.pobierzListeTermin(idoferta);
            OfertaBL ofertaBL = new OfertaBL();
            foreach (Termin termin in lista)
            {
                termin.Oferta = ofertaBL.pobierz(termin.Id_oferta);
            }
            return lista;
        }

        public ObservableCollection<Termin> pobierzListeDlaHotelu(int idhotel)
        {
            ObservableCollection<Termin> lista = dal.pobierzListeTerminHotel(idhotel);
            OfertaBL ofertaBL = new OfertaBL();
            foreach (Termin termin in lista)
            {
                termin.Oferta = ofertaBL.pobierz(termin.Id_oferta);
            }
            return lista;
        }



        public bool aktualizujListe(ObservableCollection<Termin> lista)
        {
            foreach (Termin termin in lista)
            {
                // Gdy obiekt nieznajduje się jeszcze w bazie
                if (termin.Id_termin == 0)
                {
                    this.dodaj(termin);
                }
                else
                {
                    this.aktualizuj(termin);
                }
            }
            return true;
        }


        public bool usun(ObservableCollection<Termin> lista)
        {
            foreach (Termin termin in lista)
            {
                if(termin.Id_termin != 0)
                    this.usun(termin.Id_termin);
            }
            return true;
        }

        public void usunTerminyOferty(Oferta oferta)
        {
            
        }
    }
}
